<!DOCTYPE html>
<html lang="ch-CN">
<head>
    <meta charset="UTF-8">
    <title>构造方法</title>
</head>
<style>
    body {
        width: 100%;
        height: 100vh;
        background-color: wheat;
        font-size: 30px;
        text-decoration: none;
        font-family: "华文楷体";
    }
</style>
<script>
    /*
        * 创建一个构造函数,专门用来创建Person对象
        * 构造函数就是一个普通的函数,创建方式和普通的函数一样
        * 不同的是构造函数名习惯于首字母大写
        *
        * 构造函数和普通函数的调用方式不同,
          *  普通函数直接调用 var obj=Person()
          *  构造函数需要使用new关键字来调用var obj=new Person()
    */
    /*
        * 使用instanceof可以检查一个对象是否是一个类的实例
            -语法: 对象 instanceof 构造函数 返回类型是布尔型
    */
    function Person(name, age, gender) {
        this.name = name
        this.age = age
        this.gender = gender
        this.sayName = function () {
            document.write("name:" + this.name + "age:" + this.age + "gender:" + this.gender + "<br>")
        }
    }

    function Dog(name, age) {
        this.name = name
        this.age = age
        this.sayName = function () {
            document.write("name:" + this.name + "age:" + this.age + "<br>")
        }
    }

    // Person的分类对象实例化
    let Person1 = new Person("小红", 20, "女")
    let Person2 = new Person("小兰", 30, "女")
    let Person3 = new Person("小紫", 26, "男")

    Person1.sayName()
    Person2.sayName()
    Person3.sayName()
    // 控制台查看类别
    console.log(Person1)
    console.log(Person2)
    console.log(Person3)
    // Dog的分类实例化对象
    let Dog1 = new Dog("小黑狗", 2)
    let Dog2 = new Dog("小蓝狗", 3)
    let Dog3 = new Dog("小白狗", 6)
    // 调用构造函数中的sayName()方法,输出对象中的属性以及属性值
    Dog1.sayName()
    Dog2.sayName()
    Dog3.sayName()
    // 控制台查看类别
    console.log(Dog1)
    console.log(Dog2)
    console.log(Dog3)

    // 检查一个对象是否是一个类的实例
    document.write("检查一个对象是否是一个类的实例:Person1 instanceof Person<br>")
    document.write(Person1 instanceof Person)
    document.write("<br>")
    document.write("检查一个对象是否是一个类的实例:Dog1 instanceof Dog<br>")
    document.write(Dog1 instanceof Dog)
</script>
<body>
</body>
</html>